package com.bigdata;

import java.io.Serializable;

public class Person implements Serializable {

    /*
    手动指定, 那么版本id就不会自动生成
    既然不会自动生成, 反序列化的时候, readObject 读取序列化的对象里面版本id
    和 类定义版本id来比对, 如果一直的话, 那么就可以反序列化,
    如果不一致, 会抛出异常

    比如Person类, 里面有很多属性, 有很多Person的对象已经序列化了
    有些功能具有反序列化的代码
    业务功能修改了, Person里面需要添加一些属性, 此时我们需要考虑属性是否是必须的
    1. 属性可有可无, 不会影响到主体的功能, 此时我们可以选择不修改 serialVersionUID
        , 那么原来的代码都可以顺利的执行, 不会报错
    2. 添加一个必须的属性, 那么这个属性如果没有的话, 会影响正常的代码执行,
    那么此时我们可以修改 serialVersionUID 它的值
    那么在反序列化的时候, 会直接报错, 就可以进行修复, 修复的手段就是重新的序列化一次
     */

    private static final long serialVersionUID = -6849794470754667712L;


    // Person 对象如果要序列化, 那么Person的所有序列化的属性都要支持序列化
    // 也就是说 所有的序列化的属性都要实现 Serializable 接口
    private static String name;

    private Integer age;

    private transient double height;

    private int weight;

    // 必须的
    private String hobby;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", height=" + height +
                ", weight=" + weight +
                ", hobby='" + hobby + '\'' +
                '}';
    }
}